/*
 * @Author: liqing
 * @Date: 2022-03-29 11:17:53
 * @LastEditors: liqing
 * @LastEditTime: 2022-07-06 15:45:34
 * @Description: description
 */
'use strict'

var remoteVideo = document.getElementById('remote_video');

var socket = io.connect();

var config = {
  'iceServers': [{
    'urls': 'stun:stun.l.google.com:19302'
  }]
};

var pc;

socket.emit('create or join', 'room');

socket.on('join', function (room, id) {
  console.log('userB加入房间');
});

// 监听源端同步的offer信息
socket.on('signal', function (message) {
  console.log(`enter signal userB`);
  // pc = new RTCPeerConnection(config);
  // 创建一个本地到远端的webRTC对象，因为目的端是被动接收方，故在源端同步消息后才创建
  pc = new RTCPeerConnection();
  // 在webRTC对象中记录源端offer信息（注意记录本端信息调用的是setLocalDescription，记录对端信息调用的是setRemoteDescription）
  pc.setRemoteDescription(new RTCSessionDescription(message));
  // 作为目的端创建offer对象（包含目的端的媒体信息和编解码信息）
  pc.createAnswer().then(function (answer) {
    // 在webRTC对象中记录目的端offer信息（注意记录本端信息调用的是setLocalDescription，记录对端信息调用的是setRemoteDescription）
    pc.setLocalDescription(answer);
    // 同步offer信息给源端
    socket.emit('signal', answer);
  });

  pc.addEventListener('icecandidate', function (event) {
    var iceCandidate = event.candidate;
    if (iceCandidate) {
      console.log(`iceCandidate is ${JSON.stringify(iceCandidate)}`);
      socket.emit('ice', iceCandidate);
    }
  });

  pc.addEventListener('addstream', function (event) {
    remoteVideo.srcObject = event.stream;
  });
});

socket.on('ice', function (message) {
  console.log(`get ice message`);
  pc.addIceCandidate(new RTCIceCandidate(message));
});
